package org.nmgyjt.springboot.utils;

import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


/**
 * Token工具类
 */
@Component
@Slf4j
public class TokenUtil {

    private static final String WHYMT_SESSION_KEY = "nmgyjt_session_key";
    private static final String SALT = "nmgyjt2023";
    private static final int VALIDE_TOKEN_TIME = 60 * 60 * 6;

    @Autowired
    private RedisUtil redisUtil;

    /**
     * 删除token
     */
    public void delete(String token) {
        redisUtil.del(WHYMT_SESSION_KEY.toUpperCase() + token);
    }

    /**
     * 更新token有效时间
     *
     * @param token
     */
    public void updateTokenExpire(String token) {
        redisUtil.expire(WHYMT_SESSION_KEY.toUpperCase() + token, VALIDE_TOKEN_TIME);
    }

    /**
     * 生成token
     * Token生成方式：md5(whymt_session_key&UUID&SALT(定义一个常量)&(TIME/1000))，防止与其他业务系统冲突；
     * redis key :WHYMT_SESSION_KEY_+token;  WUHAN_wl_SNOWFLAKE_WORK_CENTER_ID
     * 登陆态失效时间30分钟
     *
     * @return
     */
    public String generateToken(String userId) {
        String token = MD5.create().digestHex(WHYMT_SESSION_KEY + UUID.fastUUID().toString() + SALT + (System.currentTimeMillis() / 1000));
        String key = WHYMT_SESSION_KEY.toUpperCase() + token;
//        redisUtil.set(key, userId);
        //todo  压测时注释
        redisUtil.setex(key, userId, VALIDE_TOKEN_TIME);
        return token;
    }

    /**
     * 检验token存在
     *
     * @param token
     * @return true代表存在
     */
    public boolean checkToken(String token) {
        String value = redisUtil.get(WHYMT_SESSION_KEY.toUpperCase() + token);
        return StrUtil.isBlank(value) ? false : true;
    }


}
